﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {
        public static TabelaConvenioVO getTabelaConvenio(int idTabelaConvenio)
        {
            List<TabelaConvenioVO> listTabelaConvenioVOs = getTabelaConvenios(idTabelaConvenio, null, null);
            if (listTabelaConvenioVOs != null && listTabelaConvenioVOs.Count > 0)
                return listTabelaConvenioVOs[0];
            else
                return null;
        }
        
        public static List<TabelaConvenioVO> getTabelaConvenios()
        {
            return getTabelaConvenios(null, null, null);
        }

        public static List<TabelaConvenioVO> getTabelaConvenios(int? idTabelaConvenio, DateTime? vigenciaInicial, DateTime? vigenciaFinal)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT ta.IdTabelaConvenio, ta.IdHorario, h.Controle, ta.TabelaConvenio, ta.InicioVigencia, ta.FimVigencia, ta.Segunda, ta.Terca, ta.Quarta, ta.Quinta, ta.Sexta, ta.Sabado, ta.Domingo, ta.Feriados, ta.OutrasDatas, ta.ValorMensal, ta.ValorMensalMinimo, ta.ValorMaximo ");
            query.AppendLine("FROM tabelaconvenio ta LEFT JOIN horario h on ta.IdHorario = h.IdHorario ");
            if (idTabelaConvenio != null)
            {
                query.AppendLine(where + "IdTabelaConvenio=?IdTabelaConvenio ");
                where = "AND ";
            }
            if (vigenciaInicial != null && vigenciaFinal != null)
                query.AppendLine(where + " ta.InicioVigencia <= DATE(?VigenciaFinal) AND ta.FimVigencia >= DATE(?VigenciaInicial) ");
            else if (vigenciaInicial != null)
                query.AppendLine(where + " DATE(?VigenciaInicial) BETWEEN ta.InicioVigencia AND ta.FimVigencia ");
            else if (vigenciaFinal != null)
                query.AppendLine(where + " DATE(?VigenciaFinal) BETWEEN ta.InicioVigencia AND ta.FimVigencia ");
            query.AppendLine("ORDER BY ta.InicioVigencia DESC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idTabelaConvenio != null) cmd.Parameters.AddWithValue("?IdTabelaConvenio", idTabelaConvenio);
            if (vigenciaInicial != null) cmd.Parameters.AddWithValue("?VigenciaInicial", vigenciaInicial.Value);
            if (vigenciaFinal != null) cmd.Parameters.AddWithValue("?VigenciaFinal", vigenciaFinal.Value);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<TabelaConvenioVO> listTabelaConvenio = new List<TabelaConvenioVO>();

                while (reader.Read())
                {
                    TabelaConvenioVO tabelaConvenioVO = TabelaConvenioVO.CreateTabelaConvenioVO();
                    tabelaConvenioVO.idTabelaConvenio = reader.GetInt32("IdTabelaConvenio");
                    tabelaConvenioVO.horarioVO.idHorario = reader.GetInt32("IdHorario");
                    tabelaConvenioVO.horarioVO.controle = reader.GetString("Controle");
                    tabelaConvenioVO.tabelaConvenio = reader.GetString("TabelaConvenio");
                    tabelaConvenioVO.inicioVigencia = reader.GetDateTime("InicioVigencia");
                    tabelaConvenioVO.fimVigencia = reader.GetDateTime("FimVigencia");
                    tabelaConvenioVO.segunda = reader.GetBoolean("Segunda");
                    tabelaConvenioVO.terca = reader.GetBoolean("Terca");
                    tabelaConvenioVO.quarta = reader.GetBoolean("Quarta");
                    tabelaConvenioVO.quinta = reader.GetBoolean("Quinta");
                    tabelaConvenioVO.sexta = reader.GetBoolean("Sexta");
                    tabelaConvenioVO.sabado = reader.GetBoolean("Sabado");
                    tabelaConvenioVO.domingo = reader.GetBoolean("Domingo");
                    tabelaConvenioVO.feriados = reader.GetBoolean("Feriados");
                    tabelaConvenioVO.outrasDatas = reader.GetBoolean("OutrasDatas");
                    tabelaConvenioVO.valorMensal = reader.GetDecimal("ValorMensal");
                    tabelaConvenioVO.valorMensalMinimo = reader.GetDecimal("ValorMensalMinimo");
                    tabelaConvenioVO.valorMaximo = reader.GetDecimal("ValorMaximo");

                    listTabelaConvenio.Add(tabelaConvenioVO);
                }
                reader.Close();
                return listTabelaConvenio;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setTabelaConvenio(TabelaConvenioVO tabelaConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE tabelaconvenio ");
            query.AppendLine("SET IdTabelaConvenio=?IdTabelaConvenio, IdHorario=?IdHorario, TabelaConvenio=?TabelaConvenio, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Segunda=?Segunda, Terca=?Terca, Quarta=?Quarta, Quinta=?Quinta, Sexta=?Sexta, Sabado=?Sabado, Domingo=?Domingo, Feriados=?Feriados, OutrasDatas=?OutrasDatas, ValorMensal=?ValorMensal, ValorMensalMinimo=?ValorMensalMinimo, ValorMaximo=?ValorMaximo ");
            query.AppendLine("WHERE IdTabelaConvenio=?IdTabelaConvenio ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaConvenio", tabelaConvenioVO.idTabelaConvenio);
            cmd.Parameters.AddWithValue("?IdHorario", tabelaConvenioVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaConvenio", tabelaConvenioVO.tabelaConvenio);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaConvenioVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaConvenioVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Segunda", tabelaConvenioVO.segunda);
            cmd.Parameters.AddWithValue("?Terca", tabelaConvenioVO.terca);
            cmd.Parameters.AddWithValue("?Quarta", tabelaConvenioVO.quarta);
            cmd.Parameters.AddWithValue("?Quinta", tabelaConvenioVO.quinta);
            cmd.Parameters.AddWithValue("?Sexta", tabelaConvenioVO.sexta);
            cmd.Parameters.AddWithValue("?Sabado", tabelaConvenioVO.sabado);
            cmd.Parameters.AddWithValue("?Domingo", tabelaConvenioVO.domingo);
            cmd.Parameters.AddWithValue("?Feriados", tabelaConvenioVO.feriados);
            cmd.Parameters.AddWithValue("?OutrasDatas", tabelaConvenioVO.outrasDatas);
            cmd.Parameters.AddWithValue("?ValorMensal", tabelaConvenioVO.valorMensal);
            cmd.Parameters.AddWithValue("?ValorMensalMinimo", tabelaConvenioVO.valorMensalMinimo);
            cmd.Parameters.AddWithValue("?ValorMaximo", tabelaConvenioVO.valorMaximo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newTabelaConvenio(TabelaConvenioVO tabelaConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO tabelaconvenio ");
            query.AppendLine("SET IdHorario=?IdHorario, TabelaConvenio=?TabelaConvenio, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Segunda=?Segunda, Terca=?Terca, Quarta=?Quarta, Quinta=?Quinta, Sexta=?Sexta, Sabado=?Sabado, Domingo=?Domingo, Feriados=?Feriados, OutrasDatas=?OutrasDatas, ValorMensal=?ValorMensal, ValorMensalMinimo=?ValorMensalMinimo, ValorMaximo=?ValorMaximo ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdHorario", tabelaConvenioVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaConvenio", tabelaConvenioVO.tabelaConvenio);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaConvenioVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaConvenioVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Segunda", tabelaConvenioVO.segunda);
            cmd.Parameters.AddWithValue("?Terca", tabelaConvenioVO.terca);
            cmd.Parameters.AddWithValue("?Quarta", tabelaConvenioVO.quarta);
            cmd.Parameters.AddWithValue("?Quinta", tabelaConvenioVO.quinta);
            cmd.Parameters.AddWithValue("?Sexta", tabelaConvenioVO.sexta);
            cmd.Parameters.AddWithValue("?Sabado", tabelaConvenioVO.sabado);
            cmd.Parameters.AddWithValue("?Domingo", tabelaConvenioVO.domingo);
            cmd.Parameters.AddWithValue("?Feriados", tabelaConvenioVO.feriados);
            cmd.Parameters.AddWithValue("?OutrasDatas", tabelaConvenioVO.outrasDatas);
            cmd.Parameters.AddWithValue("?ValorMensal", tabelaConvenioVO.valorMensal);
            cmd.Parameters.AddWithValue("?ValorMensalMinimo", tabelaConvenioVO.valorMensalMinimo);
            cmd.Parameters.AddWithValue("?ValorMaximo", tabelaConvenioVO.valorMaximo);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delTabelaConvenio(TabelaConvenioVO tabelaConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM tabelaconvenio ");
            query.AppendLine("WHERE IdTabelaConvenio=?IdTabelaConvenio ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaConvenio", tabelaConvenioVO.idTabelaConvenio);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
